iT邦幫忙

2023 iThome 鐵人賽

DAY 30
1

journal 與日誌檢查

SYSLOG 類別與事件層級

在 Linux 系統中,應用程式可以依自己的特性把訊息傳送到系統中,並且指定到特定的類別 (Facility),每一個類別又可以分不同的嚴重性 (Severity)。

在 Linux 已經定義好的類別如下表所示:

Facility 說明
kern 與內核相關的事件,例如驅動程式載入、硬體錯誤等。
user 使用者層級的事件,例如使用者登入、登出等。
mail 與郵件系統相關的事件,例如郵件傳輸、郵件伺服器錯誤等。
daemon 守護程式相關的事件,例如系統服務啟動、停止、錯誤等。
auth 與驗證和授權相關的事件,例如使用者驗證、授權失敗等。
syslog SYSLOG 守護程式自身的事件。
lpr 列印系統相關的事件,例如列印工作提交、列印佇列狀態等。
news 新聞伺服器相關的事件,例如新聞文章的發布、訂閱等。
uucp UUCP(Unix-to-Unix Copy)相關的事件,用於遠端檔案傳輸和通訊。
cron 與定時任務排程程式 cron 相關的事件。
authpriv 與安全驗證和授權相關的私有事件,通常包含敏感資訊。
ftp FTP 伺服器相關的事件,例如檔案上傳、下載等。
ntp 網路時間協定(NTP)相關的事件,用於同步系統時鐘。
local0 - local7 這是一組自訂 Facility,可以根據需要進行自訂和使用。

然而,隨著時代的演進,有一些服務慢慢的不如以往流行,比如 ftp 或 news 之類的類別,但大扺上系統常用的類別不超過上列的項目,如果遇到不何使用的話,通常會放到 local0 ~ local7 的自訂類別中。

每一個類別記錄中,又可以分為不同層級,用來區分事件的嚴重性,有些是一般訊息,有些則是無傷大雅的流程資訊,但是一些比較嚴重的層級如 Warning、Error、Alert 或 Emergency 等訊息,系統管理員就要嚴陣以待,評估這些訊息是否為應用程式或系統上的問題並加以排解。

通用的層級表如下所示:

Level Severity Keyword 說明
0 Emergency(緊急) emerg 表示系統遇到無法繼續運行的嚴重問題,需要立即採取行動。
1 Alert(警示) alert 表示需要立即注意和回應的情況,但不需要立即中止系統。
2 Critical(危急) crit 表示系統遭遇到重大問題,需要立即處理。
3 Error(錯誤) err 表示系統發生了錯誤或失敗的情況,但仍然可以繼續運行。
4 Warning(警告) warning 表示可能導致問題的情況或潛在的錯誤。
5 Notice(通知) notice 表示一般的重要訊息,例如正常但值得注意的事件。
6 Informational(資訊) info 表示一般的操作訊息或系統狀態更新。
7 Debug(除錯) debug 表示用於除錯和故障排除的訊息。

journal 與 rsyslog 服務

以往我們要查看 syslog 時,必須依賴 rsyslog 這類的服務,在 systemd 中自帶有日誌功能,我們使用 journalctl 來查看這些系統日誌。

以下是一個用來比較 journalctl(Systemd 日誌系統)和 rsyslog(傳統的 Syslog 伺服器)差異的表格:

功能/特性 journalctl(Systemd 日誌) rsyslog
儲存位置 二進制檔案,通常在 /var/log/journal/ 文本檔案,通常在 /var/log/ 目錄下
查看全局日誌 journalctl cat /var/log/syslogcat /var/log/messages
過濾時間範圍 journalctl --sincejournalctl --until 需使用 grepawk 等工具
日誌輪替 自動管理,透過設定自動輪替 通常由 logrotate 管理,需要手動設定
處理二進制日誌 原生支援 不支援
寫入遠端伺服器 需要額外配置或轉發到 rsyslog 原生支援
查看即時日誌 journalctl -f tail -f /var/log/[log file]
系統啟動後日誌 journalctl -b 通常在 /var/log/boot.log 或相似檔案中查看

這個表格提供了 journalctlrsyslog 之間基本的區別和特性比較。通常如果是單機或少量主機管理的話,使用 journalctl 足夠掌握系統訊息,但是主機數量一多,就需要搭配 rsyslog 的異地日誌主機來協助統一納管訊息。

我們可以根據環境的具體需求和習慣,選擇其中一個作為主要的日誌查看和管理工具。

查看系統記錄

jourctl

在這毎部份裡,我們介紹如何使用 journalctl 查看系統資訊:

  • 查看所有系統記錄

    root# journalctl
    
  • 查看 2023-06-11 之後的記錄

    root# journalctl --since "2023-06-11"
    
  • 查看標記為 class 的記錄

    root# journalctl -t class
    

在 Enterprise Linux 中,journal 會把資料放在記憶體中,重開機後這些記錄會不見,若要將系統記錄資料持久化,可建立目錄 /var/log/journal/ 就可以把所有資料儲存起來。

root# mkdir /var/log/journal/

rsyslog

rsyslogsystemdjournal 一樣會截取系統 SYSLOG 資訊,rsyslog 是系統的服務之一,會將收到的資訊寫到 /var/log/ 目錄裡的相關檔案,除非特別設定,否則大部份訊息都會存到 /var/log/messages 檔案中。

寫到作業系統訊息管道

如果要把自訂訊息存到 syslog 中,可以使用 logger 指令完成,如下所示:

root# logger -t class -p user.info "Hello"

以下項目,將上述的做法分解說明:

logger -t class -p user.info "Hello"

參數 說明
-t 為這筆記錄貼上的標籤,如 class
-p 這筆記錄要記在一個系統訊息類別 (user) 的等級 (info)
"Hello" 這筆記錄的實際訊息

接著我們可以使用先前介紹的 journalctl 工具找出標籤為 class 的訊錄:

root# journalctl -t class

總合應用

Log 是整個系統維運中重要的部份,它記載著系統運作的訊息,從開機、使用者行為、程式訊息到自訂的 Log 訊息都可以被收納起來。

在資訊安全應用中,當我們需要瞭解事件的軌跡時,在這種情境下也唯有 Log 才能夠讓管理員判別事件的前因後果,因此也應對 Log 進行妥善保管。


上一篇
Day 29: systemctl 與服務管理
系列文
Linux 升華:初學者的探索到專家的洞察30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言